約 4,282,352 件
https://w.atwiki.jp/abwiki/pages/305.html
関数内で、自身の関数を呼ぶ処理のこと。再帰的関数を使う事で、ある種のアルゴリズム表記を端的に 表現可能な場合もあるが、多くの場合、デバックや可読性に難が生じる場合がある。 一般に、再帰的表現はループ展開による表現が可能である。 '再帰Function sum41(a As long, b As long) as longif a b then exit functionsum41=a+sum41(a+1,b)End Function#N88BASICPrint sum41(sum41(1,sum41(-1,3)),sum41(sum41(1,sum41(1,2)),9)) 再帰的処理では、自身の関数を呼ぶので、結果として無限ループとなる。したがって、通常はif文などを 用いて停止条件などを指定する必要がある。 しかし実際には再帰的関数は、幾つかの手続き型言語では、再帰関数は無限ループとはならない。 原因は、関数を実行する際の引数保存スタックで、引数等をスタックと呼ばれる変数に一時的に退避する仕組みを持つ為。 スタックは無限ではないので、再帰途中で停止する。 再帰的関数の代表的な例は、LispやSchemeなどのプログラミング言語で、殆どの処理においてループに該当する 処理は再帰的関数として書かれ、ループ構文が無い言語も存在する。 近年になり、幾つかのプログラミング言語ではLisp的な機能を取り入れる等、見直されている。 ループはなんでも再帰するのが上級者。
https://w.atwiki.jp/abwiki/pages/467.html
Win32プロジェクトを新規作成、コモンコントロールを使う、にちえっく。 メインウインドウにラジオボタンを貼る。 確認用ボタンを貼る。 ボタンのイベントハンドらを書き、状態を知る。 戻り値は、TRUE/FALSEで判定。 ラジオボタンの数だけ値を得て確認。 コードエディタ上では、個別にラジオボタンが押されたときのイベントをかくこともかのう。 Sub MainWnd_CommandButton1_Click()Dim rtn As LongDim hradio As HWNDhradio=GetDlgItem(hMainWnd,RadioButton1)rtn=SendMessage(hradio,BM_GETCHECK,0,0)msgbox hMainWnd,Str$(rtn)End Sub このほか、ラジオボタンにはグループ属性がある。 例えば、1~8までのラジオボタンがあり、ラジオボタンのプロパティのグループ属性を チェックsる際、1,4,6だけにグループ属性をチェックすると、 1~3、4~5、6~8、 というラジオボタンのグループとなる。 必要ならグループボックスを使ってラジオボタンをまとめる。
https://w.atwiki.jp/abwiki/pages/395.html
/***********************************************************cardano.c -- 3次方程式***********************************************************/#N88BASICCONST PI = 3.14159265358979323846264 /* 円周率 */#define CHECKDeclare Function acos CDECL Lib"msvcrt"(x As Double) As DoubleDeclare Function fabs CDECL Lib"msvcrt"(x As Double) As DoubleFunction cuberoot(x As Double) As DoubleDim s, prevDim pos As LongIf (x = 0) Then cuberoot = 0 Exit FunctionIf (x 0) Then pos = 1 Else pos = 0 x = -xIf (x 1) Then s = x Else s = 1Doprev = s s = (x / (s * s) + 2 * s) / 3Loop while (s prev)If (pos) Then cuberoot = prev Else cuberoot = -prevEnd FunctionSub cardano(a, b, c, d)Dim p, q, t, a3, b3, x1, x2, x3b = b / (3 * a) c = c / a d = d / ap = b * b - c / 3q = (b * (c - 2 * b * b) - d) / 2a = q * q - p * p * pdebugIf (a = 0) Thenq = cuberoot(q) x1 = 2 * q - b x2 = -q - bPrint "x = ";x1;", ";x2;" (重解)"#ifdef CHECKPrint "f(x1) = ", x1 * (x1 * (x1 + 3 * b) + c) + dPrint "f(x2) = ", x2 * (x2 * (x2 + 3 * b) + c) + d#endIfElse If (a 0) ThenIf (q 0) Thena3 = cuberoot(q + Sqr(a))Elsea3 = cuberoot(q - Sqr(a))End Ifb3 = p / a3x1 = a3 + b3 - b x2 = -0.5 * (a3 + b3) - bx3 = fabs(a3 - b3) * Sqr(3.0) / 2Print "x = ";x1;"; ";x2;" +- ";x3;" i"#ifdef CHECKPrint "f(x1) = "; x1 * (x1 * (x1 + 3 * b) + c) + dPrint "f(x2+-x3i) = ";((x2+3*b)*x2-x3*x3+c)*x2-(2*x2+3*b)*x3*x3+d;" +- ";((3*x2+6*b)*x2-x3*x3+c)*x3;" i"#endIfElsea = Sqr(p) t = acos(q / (p * a)) a *= 2x1 = a * Cos( t / 3) - bx2 = a * Cos((t + 2 * PI) / 3) - bx3 = a * Cos((t + 4 * PI) / 3) - bPrint "x = ";x1, x2, x3#ifdef CHECKPrint "f(x1) = ", x1 * (x1 * (x1 + 3 * b) + c) + dPrint "f(x2) = ", x2 * (x2 * (x2 + 3 * b) + c) + dPrint "f(x3) = ", x3 * (x3 * (x3 + 3 * b) + c) + d#endIfEnd IfEnd SubDim a, b, c, dInput "a b c d = ";a,b,c,dIf (a = 0) ThenPrint "3次方程式ではありません."Elsecardano(a, b, c, d)End If
https://w.atwiki.jp/skygaleon/pages/166.html
●マジックボックスとは マジカルボックス・シールドボックス・パンドラボックス・レアボックスの総称です。 ゲーム内では“アイテムガチャ”とも呼ばれています。 バトル、練成釜、トレジャーハンター、ショップでの販売で入手できます。 開封するとランダムで各種マテリアルや回復・錬金アイテムなどが入っていますが、 ブロンズカードをはじめとしたカード系は手に入りません。 内容ラインナップの中にあるレアボックスは1/1800です。出て来たら驚愕必至。 ◆マジカルボックス 内容 フォース回復(中)×2 バトルパワー回復P×2 バトルパワー回復P×4 全種ストーン×2 各種ストーン×8 レアボックス×1 魔導師の秘薬×4 魔導師の霊薬×2 魔導師の雫×1 各種オーブ×1魔導師の希釈薬×1 フォース回復(小)×2バトルパワー回復P×2 フォース回復(満)×2バトルパワー回復P×2 地図の欠片×1 - - ◆シールドボックス 内容 全種ストーン×2 マジカルボックス×2 レアボックス×1 魔導師の秘薬×5 魔導師の霊薬×3 魔導師の雫×1 各種オーブ×1魔導師の秘薬×2 魔導師の秘薬×1魔導師の霊薬×3 地図の欠片×2魔導師の霊薬×2 フォース回復(大)×1バトルパワー回復P×3 フォース回復(大)×4バトルパワー回復P×4 フォース回復(満)×5バトルパワー回復P×4 バトルパワー回復P×4 フォース回復(小)×1フォース回復(中)×2 フォース回復(大)×2フォース回復(満)×1 バトルパワー回復P×5 ◆パンドラボックス 内容 全種オーブ×1 各種トルマリン×1 レアボックス×1 フォース回復(満)×3バトルパワー回復P×1 フォース回復(満)×1バトルパワー回復P×8 フォース回復(小)×1フォース回復(満)×3 フォース回復(満)×5バトルパワー回復P×5 フォース回復(満)×10バトルパワー回復P×10 マジカルボックス×2フォース回復(大)×2 魔導師の秘薬×4魔導師の霊薬×3魔導師の雫×2 各種オーブ×2魔導師の雫×2 地図の欠片×3魔導師の雫×3 バトルパワー回復P×11 - ◆レアボックス 内容 各種トルマリン×1同色のオーブ×5 各種宝石×1 バトルパワー回復P×50 魔導師の雫×20 - ◆ギガントボックス 唯一の例外として、このガチャは限定カードも入手できます。 内容 中川翔子描き下ろしカード×2種類 SRイドーラ LEラブマミタス 中川翔子モチーフカード×3種類 Rしょここ SRしょこナイト SR女神しょこたん フォース回復(テラ)×2 貪欲トルマリンス×1 バトルパワー回復GIZA×12 らいティンの小瓶×40 しょこたんの地図の欠片×各1 ルナの小瓶×6 シミュレータモノリスマミタス×1 マミタスの雫×1 ◆天空アリーナマップボックス 内容 天空アリーナの地図A×1 天空アリーナの地図B×1 天空アリーナの地図C×1 天空アリーナの地図×各1 ◆リミテッドアルケミーボックス 2012/1/30~2012/2/9 の期間限定販売(800円相当) 内容 タリストーンの湧水×5 ノースブレイヴの神酒×3 魔導師の雫×10タリストーンの湧水×2ノースブレイヴの神酒×1 Rオマモリ×8 SRオマモリ×5 各種トルマリン×4、魔導師の雫×1 ◆2ndアニバーサリーボックス(シルバー) 内容 グリーントルマリン×1グリーンオーブ×2 ルベライト×1レッドオーブ×2 グリーントルマリンルベライトブルートルマリンブラックトルマリンアクロアイト各1 ブルートルマリン×1ブルーオーブ×2 ブラックトルマリン×12ブラックオーブ×2 魔道師の霊薬×2魔道師の雫×1 Rオマモリ×1UCオマモリ×1 タリストーンの湧水×1 バトルパワー回復P×10 ◆ササモリ袋 内容 ギリチョコ×5トモチョコ×5 ササモリ袋×1 虹のオーブ×5 フレンドストーン×50 ウィリデアニマ×10ルブルムアニマ×10カエルレウムアニマ×10アートルムアニマ×10 クリスマスチキン×5クリスマスケーキ×3クリスマスプレゼント×1 ペロペロキャンディ×10 トリアイナ×1 ホルスの指輪×1 トリシューラ×1 天叢雲剣×1 邪悪の心×1 梟の目×1 巨大な瓢箪×1 ミニリサイクルピース×30 リサイクルピース×18 悪魔の地図セット 坂東の地図セット チョコレートの地図セット 天空アリーナの地図セット ホワイトチョコレートの地図セット パンプキンの地図セット エクストラピース×18 マジカルボックス×10 ブロンズカード×10
https://w.atwiki.jp/abwiki/pages/224.html
#N88BASICDeclare Function EnumWindows Lib"user32" (lpEnumFunc As VoidPtr, lp As DWord) As DWordDim count As LongFunction EnumWindowsProc(hwnd As HWND, lp As DWord) As DWordDim ttl[555] As ByteGetWindowText(hwnd, ttl, 555)If ttl[0] 0 ThenPrint Hex$(hwnd) + " " + MakeStr(ttl)count++If count = 20 ThenInput ttlcount = 0End IfEnd IfEnumWindowsProc=TRUEEnd FunctionEnumWindows(AddressOf(EnumWindowsProc), 0)
https://w.atwiki.jp/abwiki/pages/233.html
プログラミングはしてみたけど、いざ実行すると強制終了してしまう。なんでぇ~( _ ) この変数の値がちゃんとしてるか、MessageBoxでいちいちチェックするのって面倒… そこのあなた、こんなお悩み抱えていませんか?こんなときに登場するのが「プロセス デバッガ」。デバッグのやり方さえ覚えてしまえば、これらの問題はスマートに解決できます。 そもそも、デバッグって何? 「デバッグ」=「バグを取り除く」などという意味を持ちますが、一般的に、作ったプログラムに不具合はないかを、コードを一つ一つチェックしながら実行したり、任意のタイミングで変数の内容を表示しながら実行するといったことをしてチェックします。 論より証拠、実際にデバッギングを体験してみましょう。 まずは誰が見てもおかしいことに気付くプログラムをリリース コンパイル(F7キー)し、実行してみます。 Dim i As LongDim a[10] As LongFor i=0 To 10a[i]=iNexti=0Doa[i]=ii=i+1Loop 無限ループで配列要素が大きくなりすぎるという誰でも予想がつくバグを潜ませておきましたが、予想通り出ましたね、「アプリケーション エラー」。Win9x系のOSでは、「不正な処理」がでているのではないでしょうか? ここでは余裕な顔をしていられますが、これが自分の力作プログラムで起こったのであれば、面白いはずがありません。 では、どう対処するのか それは、これらのボタンが解決してくれます。左から、「デバッグ実行」、「デバッグ コンパイル」というコマンドとなり、メニューの「ベーシック」からも利用することができます。 大概の場合はデバッグ実行(ビックリマークのほう)で事足りてしまうので、初めての方はデバッグ コンパイルのほうはあまり考えなくてよいです。 では、先ほどのおかしなプログラムを開いた状態で、デバッグ実行をしてみましょう。 すると、アクセスエラーを起こした行の位置でプログラムがストップし、プロセスデバッガが情報を伝えてくれます。ご丁寧に、①のようにエラーの行が反転表示され、②のメッセージが表示されると共に、③が表示されます。 この③の「ブレーク ポイント」ダイアログボックスが以下のようなプログラムの実行状況を伝えてくれます。 グローバル変数 ローカル変数(プロシージャ実行時に限る) スレッド プロシージャの階層状況 今回はおかしなプログラムのデバッグということで進めているので、ここに表示されている変数iの値に注目してみます。 iは300になっていますね(環境によって多少異なります)。とすると、a[300]という配列変数に値300が代入されることになるわけですが、配列aで扱える変数データは10コまでとなっているはずです。当然、300ではアクセスエラーとなります。(299ではいいのか?という問題については、メモリの配置図ウンヌンという話になってしまうので、あまり深く考えずに・・・) という風に、無事、プログラムのアクセス エラーの場所が判明されました。デバッギングはここまで。エラーにならないよう、後に修復を行うのはあなたのお仕事です☆ プログラムを意図的に停止させる、Debug命令語 デバッグコンパイル時のみ有効であり、リリースコンパイル時には無視されるDebug命令語、プログラムをトレース実行するにはもってこいの命令です。ここでも非常に簡単なプログラムでDebug命令語を体験してみましょう。 Dim a As LongDebuga=10a=20a=30 なんじゃこりゃ!?と思えてしまうようなプログラムですが、主役はDebug命令語です。デバッグ実行をしてみると、すぐさま、「ブレーク ポイント」ダイアログが表示されるはずです。 そしたら、今度は、「ステップ アウト」をクリックしてみて下さい。するとすぐに同じダイアログボックスが表示されるわけですが、変数aの値が10に変化しているのにお気づきでしょうか?それと共に、プログラムの実行位置も "a=10" の行になっていますね。 もうなにをしたかはお気づきですね。そうです、一行ずつ実行をしているのです。更に「ステップ アウト」をクリックしていくと、aの内容は20、30と変化し、プログラムは無事終了します。 このように、デバッガを利用することで、プログラムを一行ずつ実行して動きをチェックしていくことができます。Debug命令語はプログラム内の様々な場所に何個でも配置することができます。 ところで、ステップ インとステップ アウトの違いは? そうそう、忘れないうちに説明しておきましょう。非常に似たような機能ですが、以下のような相違点があります。 ステップ イン … 内部プロシージャ呼び出しの行を実行する場合に、プロシージャ内に入る ステップ アウト … 内部プロシージャ呼び出しの行を実行する場合に、プロシージャを実行して飛び越す 一言で言えば、プロシージャ内に入って調べるか、飛び越すかの違いです。プロシージャ呼び出しではない行の場合はどちらも同じです。 最後に デバッグの達人はプログラミングの達人です。積極的にデバッガを利用し、どんなバグに対しても対処できるようになりしたものですね。私ももう少しがんばらねば…
https://w.atwiki.jp/abwiki/pages/387.html
/***********************************************************crnd.c -- 線形合同法***********************************************************/Dim seed = 1 As DWord/* 任意 */Sub init_rnd(x As DWord)seed = xEnd SubFunction irnd() As DWordseed = seed * 1566083941 As DWord + 1irnd = seedEnd FunctionFunction rnd() As Double /* 0 = rnd() 1 */rnd = (1 / 4294967296) * irnd() As DoubleEnd Function/**********************************************************/#N88BASICDim i As Longinit_rnd(12345) /* 任意の DWord で初期化. 省略可. */For i= 0 To 159Print rnd(),Next
https://w.atwiki.jp/abwiki/pages/432.html
/***********************************************************contain.c -- 区間の包含関係***********************************************************/#N88BASICType intervalleft As Longright As LongEnd Type'Sub bsort(base As *interval, num As DWord, size As DWord, f As VoidPtr)Dim compare As *Function(a As *interval, b As *interval) As Longcompare = fDim i As Integer, j As Integer, k As IntegerDim x As intervalk = num - 1While k = 0j = -1'番兵のセットFor i = 1 To k + 1'隣通しの比較と交換If cmp(VarPtr(base[i - 1]), VarPtr(base[i])) = 1 Thenj = i - 1x = a[j]a[j] = a[i]a[i] = xEnd IfNext ik = jWendEnd SubFunction cmp(x As *interval, y As *interval) As Longif x- left y- left Then cmp = 1 Exit Function if x- left y- left Then cmp = -1 Exit Function if x- right y- right Then cmp = 1 Exit Function if x- right y- right Then cmp = -1 Exit Function cmp = 0End FunctionSub mark(n As Long, a As *interval, contained As *Long)Dim i As Long, maxright As Longbsort(a, n, SizeOf(interval), AddressOf(cmp))maxright = a[0].rightcontained[0] = FALSEFor i=1 To n-1if a[i].right = maxright thencontained[i] = TRUEElsemaxright = a[i].rightcontained[i] = FALSEEnd IfNextEnd SubConst N = 20Dim a[N] As intervalDim contained[N] As Longmain()Sub main()Dim i As Long, x As Long, y As Longi = 0While (i N) x = rand() / (RAND_MAX / 100 + 1)y = rand() / (RAND_MAX / 100 + 1)if x y Thena[i].left = x a[i].right = y i++End IfWendmark(N, a, contained)For i=1 To N-1Print "(";a[i].left;",";a[i].right;")";If contained[i] = TRUE ThenPrint "*"ElsePrint " "End IfNextEnd Sub
https://w.atwiki.jp/abwiki/pages/483.html
#N88BASIC'区分求積法 その1Const CX = 320Const CY = 200'定義Function F(x As Double) As DoubleF = (Sin(x)+Sin(x*4)) * 100End Function'画面Function GrI() As LongDim x As Long, y As LongDim f As LongFor x=0 To 640 Step 10Line(x, 0)-(x, 400),1NextFor y=0 To 400 Step 10Line(0, y)-(640, y),1NextLine(CX,0)-(CX,399),5,BLine(0,CY)-(639,CY),5,BLine(0,0)-(639,399),5,BFor x=-320 To 320If f=0 ThenPset(CX+x, CY-F(x * 3.1416/180)), 7f=1ElseLine -(CX+x, CY-F(x * 3.1416/180)), 7End IfNextEnd FunctionFunction Sum(start As Double, send As Double, dx As Double) As DoubleDim i As DoubleFor i=start To send+dx Step dxLine(CX+i,CY-0)-(CX+i+dx, CY-F(i * 3.1416/180)),4,BFSum = Sum + dx * F(i * 3.1416/180)Locate 20, 25 Print "i=";i, "sum=";Sum,,NextEnd FunctionGrI()'初期Sum(-100, 100, 0.01)
https://w.atwiki.jp/abwiki/pages/399.html
/***********************************************************contfrac.c -- 連分数***********************************************************/#N88BASICSub contfrac(x As Double, n As Long, b As *Long)Dim i As Longb[0] = Fix(x)For i = 1 To nx = 1 / (x - b[i - 1])b[i] = Fix(x)NextEnd SubFunction gcd(x As Long, y As Long) As LongDim t As LongWhile (y 0) t = x Mod y x = y y = tWendgcd = xEnd FunctionSub reduce_cf(n As Long, b As *Long)Dim i As LongDim f As Long, g As Long, temp As Long, d As Longf = b[n] g = 1For i = n - 1 To 0 Step -1temp = b[i] * f + g g = f f = tempd = gcd(f, g) f = f / d g = g / dNextPrint f ;"/"; g ;"="; f / gEnd SubConst N = 17Dim i As LongDim b[N] As Long/* e = 2.718...の連分数展開 */contfrac(2.71828182845904524, N, b)Print "e = [";For i = 0 To N Print b[i];",";NextPrint "...]"/* ふつうの分数と実数に直す */reduce_cf(N, b)